// #include <stdio.h>
// #include <sys/socket.h>
// #include <netinet/in.h>
// #include <arpa/inet.h>

// int main()
// {
//     struct sockaddr_in addr;
//     inet_aton("127.0.0.1", &addr.sin_addr);
//     uint32_t* ptr = (uint32_t*)&addr.sin_addr;
//     printf("addr: %x\n", *ptr);
//     printf("addr_str: %s\n", inet_ntoa(addr.sin_addr));

//     return 0;
// }

// #include <stdio.h>
// #include <arpa/inet.h>

// int main() 
// {
//     struct sockaddr_in sa;
//     char buffer[INET_ADDRSTRLEN];

//     // 设置IPv4地址
//     sa.sin_family = AF_INET;
//     sa.sin_addr.s_addr = htonl(INADDR_LOOPBACK);

//     // 将二进制格式IP地址转换为字符串格式
//     const char *ip = inet_ntop(AF_INET, &(sa.sin_addr), buffer, INET_ADDRSTRLEN);

//     printf("IP地址：%s\n", buffer);

//     return 0;
// }


// #include <stdio.h>
// #include <arpa/inet.h>

// int main() 
// {
//     char ip_addr[] = "127.0.0.1";
//     struct in_addr addr;

//     // 将字符串形式的IPv4地址转换为二进制形式，并存储到addr中
//     if (inet_pton(AF_INET, ip_addr, &addr) <= 0) 
//     {
//         printf("Invalid IP address\n");
//         return -1;
//     }

//     // 输出二进制形式的IP地址
//     printf("Binary IP address: 0x%x\n", addr.s_addr);

//     return 0;
// }

// #include <stdio.h>
// #include <netinet/in.h>
// #include <arpa/inet.h>

// int main()
// {
//     struct sockaddr_in addr1;
//     struct sockaddr_in addr2;
//     addr1.sin_addr.s_addr = 0;
//     addr2.sin_addr.s_addr = 0xffffffff;
//     char* ptr1 = inet_ntoa(addr1.sin_addr);
//     char* ptr2 = inet_ntoa(addr2.sin_addr);
//     printf("ptr1:%s  ptr2:%s\n", ptr1, ptr2);

//     return 0;
// }


#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <pthread.h>

void* Func1(void* p) 
{
    struct sockaddr_in* addr = (struct sockaddr_in*)p;
    while (1) 
    {
        char* ptr = inet_ntoa(addr->sin_addr);
        printf("addr1: %s\n", ptr);
        sleep(1);
    }
    return NULL;
}

void* Func2(void* p) 
{
    struct sockaddr_in* addr = (struct sockaddr_in*)p;
    while (1) 
    {
        char* ptr = inet_ntoa(addr->sin_addr);
        printf("addr2: %s\n", ptr);
        sleep(1);
    }
    return NULL;
}

int main() 
{
    pthread_t tid1 = 0;
    struct sockaddr_in addr1;
    struct sockaddr_in addr2;
    addr1.sin_addr.s_addr = 0;
    addr2.sin_addr.s_addr = 0xffffffff;
    pthread_create(&tid1, NULL, Func1, &addr1);
    pthread_t tid2 = 0;
    pthread_create(&tid2, NULL, Func2, &addr2);
    pthread_join(tid1, NULL);
    pthread_join(tid2, NULL);
    return 0;
}